// 导入数据库
const db = require("../db/index");
// 导入bcryptjs包：密码加密
const bcrypt = require("bcryptjs");
// 导入生成token的包
const jwt = require("jsonwebtoken");
// 导入全局配置文件：token密钥
const config = require("../config");

// 根据用户名查询用户信息
const selectUser = "select * from ev_users where username=?";
// 注册
exports.regist = (req, res) => {
    // 获取提交数据
    const userObj = req.body;
    // 查询数据库表是已经有改用户
    db.query(selectUser, userObj.username, (err, results) => {
        if (err) {
            res.mess(err);
        } else {
            if (results.length > 0) {
                //   该用户已被注册
                res.mess("该用户已经被注册过！");
            } else {
                // 进行用户注册操作
                // 对密码进行加密处理
                userObj.password = bcrypt.hashSync(userObj.password, 10);
                const addUser = "insert into ev_users set ?";
                db.query(
                    addUser, { username: userObj.username, password: userObj.password },
                    (err, results) => {
                        if (err) {
                            return res.mess(err);
                        } else if (results.affectedRows !== 1) {
                            return res.mess("注册失败，请稍后再试！");
                        } else {
                            return res.mess("注册成功！", 200);
                        }
                    }
                );
            }
        }
    });
};
// 登录
exports.login = (req, res) => {
    // 获取提交数据
    const userObj = req.body;
    // 查询该用户是否存在
    db.query(selectUser, userObj.username, (err, results) => {
        if (err) return res.mess(err);
        if (results.length !== 1) return res.mess("登陆失败，用户名不存在！");
        // 判断密码是否一致
        const compareRes = bcrypt.compareSync(
            userObj.password,
            results[0].password
        );
        if (compareRes) {
            // 获取查询信息
            const user = {...results[0], password: "", user_pic: "" };
            // 生成token
            const tokenStr = jwt.sign(user, config.jwtSecretKey, {
                expiresIn: config.expiresIn,
            });
            res.send({
                status: 200,
                message: "登录成功！",
                token: "Bearer " + tokenStr,
            });
        } else {
            res.mess("登陆失败！密码不正确！");
        }
    });
};